Computerized devices control almost every aspect of our life—from writing documents to controlling traffic lights. However, computerized devices are bug-prone, and thus require a testing phase in which the bugs should be discovered. The testing phase is considered one of the most difficult tasks in designing a computerized device. The cost of not discovering a bug may be enormous, as the consequences of the bug may be disastrous. For example, a bug may cause the injury of a person relying on the designated behavior of the computerized device. Additionally, a bug in hardware or firmware may be expensive to fix, as patching it requires call-back of the computerized device. Hence, many developers of computerized devices invest a substantial portion of the development cycle to discover erroneous behaviors of the computerized device.
During the testing phase a System Under Test (SUT) may be subject to quality assurance (QA) activities, such as but not limited to code review, design review, specification review, testing, or the like. The SUT may be, for example, a computer program, a hardware device, a firmware, an embedded device, a component thereof, or the like.
However, QA activities may consume resources, such as time, manual labor, processor time, or the like. As a result, in some cases, during the testing phase not all possible QA activities are performed due to constraints on the resources available.